package com.mjf.cjt.util;

import cn.hutool.core.collection.CollectionUtil;

import java.nio.ByteBuffer;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.List;

/**
 * <p>
 * desc
 * </p>
 *
 * @author chenshoumeng
 * @date 2025/4/11 11:15
 */
public class TMUtils {

    /**
     * 转换ts时间
     * @return 时间对象LocalDateTime
     */
    public static LocalDateTime tmTsTimeToLocalDateTime(List<Integer> tsList) {

        if (CollectionUtil.isEmpty(tsList)) {
            return null;
        }

        // 转换成 byte[]
        byte[] tsBytes = new byte[8];
        for (int i = 0; i < 8; i++) {
            tsBytes[i] = tsList.get(i).byteValue();
        }

        // 解析时间戳（默认使用大端序）
        ByteBuffer buffer = ByteBuffer.wrap(tsBytes);
        long timestamp = buffer.getLong();  // 可能是毫秒时间戳
        // 转换为时间（假设是毫秒时间戳）
        LocalDateTime dateTime = Instant.ofEpochMilli(timestamp)
            .atZone(ZoneId.systemDefault())
            .toLocalDateTime();
        return dateTime;
    }

    /**
     * 转换ts时间
     * @return 时间字符串
     */
    public static String tmTsTimeToString(List<Integer> tsList) {
        LocalDateTime dateTime = tmTsTimeToLocalDateTime(tsList);
        if (dateTime == null) {
            return "";
        }
        DateTimeFormatter customFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        return dateTime.format(customFormatter);
    }

    /**
     * 转换畅捷通时间戳
     */
    public static String tmTsTimeToStr(String dateStr) {
        // 提取时间戳
        String timestampStr = dateStr.replaceAll("[^0-9]", "");
        long timestamp = Long.parseLong(timestampStr);

        // 转换为 yyyy-MM-dd
        LocalDateTime dateTime = Instant.ofEpochMilli(timestamp)
            .atZone(ZoneId.systemDefault()) // 可替换为 ZoneId.of("Asia/Shanghai")
            .toLocalDateTime();

        return dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
    }

    /**
     * 获取期初会计期间
     */
    public static String getBeginAccountingPeriod(String accountingperiod) {
        LocalDate dateTime = LocalDate.parse(accountingperiod + "-01");
        dateTime = dateTime.minusDays(1);
        return dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")).substring(0, 7);
    }

}
